// 项目路由配置

import Vue from 'vue'
import VueRouter from 'vue-router'
// 引入store
import store from '@/store'

// 异步组件加载（路由懒加载改造）
// 导入登录路由
// import Login from '@/views/login'
const Login = () => import('@/views/login')
// 导入导航页路由
const LayoutIndex = () => import('@/views/layout')
// 导入搜索页路由
const Search = () => import('@/views/search')
// 导入搜索结果页路由
const SearchResult = () => import('@/views/search/components/result')

// 导入导航栏底部相关页面路由
const Home = () => import('@/views/home')
const Question = () => import('@/views/question')
const User = () => import('@/views/user')
const Video = () => import('@/views/video')

// 导入文章详情页路由
const Article = () => import('@/views/article')

// 导入个人中心编辑页
const UserProfile = () => import('@/views/user/components/userProfile')
// 导入小智页面
const UserChat = () => import('@/views/user/components/userChat')

Vue.use(VueRouter)

const router = new VueRouter({
  routes: [
    // 登录页路由配置
    { path: '/login', component: Login },
    // layout首页路由配置
    {
      path: '/', component: LayoutIndex,
      // 首页下的二级路由
      children: [
        { path: '', component: Home },
        { path: '/question', component: Question },
        { path: '/videos', component: Video },
        { path: '/user', component: User },
      ]
    },
    { path: '/search', component: Search },
    { path: '/searchResult', component: SearchResult },
    // 配置文章详情路由，并设置参数
    { path: '/article/:id', component: Article },
    // 配置个人中心编辑页
    { path: '/userProfile', component: UserProfile },
    // 人工智能-小智
    { path: '/userChat', component: UserChat }
  ]
})

// 路由实例上有前置导航守卫：所有的路由在真正被访问前, 都会先经过全局前置守卫, 让全局前置守卫放行了, 才会继续访问到路由
// to from 都是路由信息对象
// to是要去哪 from是从哪来
// next是一个放行的函数  只要next不调用,页面是看不到的
// 需要登录认证的页面
const authUrls = ['/user']
router.beforeEach((to, from, next) => {

  // 如果是去 /login, 判断 token 存不存在, 如果 token 存在说明登录过了, 直接跳转到首页
  if (to.path === '/login' && store.state.user.tokenInfo.token) {
    next('/')
    return
  }

  // 如果是需要登录认证的页面
  // to.path: 将要去的页面
  console.log('to.path: ' + to.path)
  if (authUrls.includes(to.path)) {
    // 进行身份验证
    // 存在token，即放行
    console.info('在拦截目录')
    if (store.state.user.tokenInfo.token) {
      // 放行
      next()
    } else {
      // 拦截到登录
      next({
        // next({ path: `/login?backto=${to.fullPath}` })
        // 需要改造路由地址 fullPath详细信息
        path: `/login`, query: { backto: to.fullPath }
      })
    }

    // 不是登录验证的页面
  } else {
    // 访问的是没有权限的页面，直接放行
    next()
  }
})

export default router
